/*
 * @lc app=leetcode.cn id=714 lang=cpp
 *
 * [714] 买卖股票的最佳时机含手续费
 */

// @lc code=start
class Solution
{
public:
  int maxProfit(vector<int>& prices, int fee)
  {
    int n = prices.size();
    // hold表示第i为持股状态，no_hold表示第i天为没有持股状态
    int hold = -prices[0] - fee, no_hold = 0;
    for (int i = 1; i < n; ++i) {
      int _hold = max(hold, no_hold - prices[i] - fee);
      int _no_hold = max(no_hold, hold + prices[i]);
      hold = _hold;
      no_hold = _no_hold;
    }
    return no_hold;
  }
};
// @lc code=end
